package com.study.controller;


import com.study.anno.OpLog;
import com.study.entity.Dept;
import com.study.entity.Result;
import com.study.service.DeptService;
import lombok.extern.java.Log;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;


import java.util.List;

/**
 * 接收请求、响应数据层
 */
@Slf4j
@RestController//等价于@Controller +@ResponseBody:作用将返回的对象/集合自动转换成json格式
@RequestMapping("/depts")  //提取公共路径
public class DeptController {

//    private DeptService deptService = new DeptServiceImpl();
    @Autowired //从IOC容器中，自动寻找bean对象，为该变量赋值(依赖注入Di的实现，是根据类型注入的），若有相同类型的bean，会报错，有三种解决办法
                    //方法一：在想要注入的bean对应的类上加@Primary注解：指定该bean优先级最高
                    //方法二：在要创建的对象上面（即@Autowired下面）加@Qualifier("bean名字")指定要用哪个类的bean对象
                    //方法三：在要创建的对象上面=加@Resourece(name="bean名字")指定要用哪个类的bean对象,等价于@Autowired+@Qualifier("bean名字")
    private DeptService deptService;
    //限制请求方式为GET
    @GetMapping//("/depts")//限制请求方式为GET，等价@RequestMapping(value = "/depts",method = RequestMethod.GET)
    public Result getAll() {
        //1、调用service获取数据
        List<Dept> list = null;
        try{
            list = deptService.list();
        }catch (Exception e) {
            throw new RuntimeException(e);
        }
        //2、响应数据(json格式)
        return  Result.success(list);
    }
    @OpLog
    @DeleteMapping//("/depts")
                                //@RequestParam的required属性默认为true，表示必须传此参数，否则报错。也可以不加注解，但是形参名要和参数名一样
    public Result deleteDept(@RequestParam Integer id){
        log.info("deptId={}",id);
        deptService.delete(id);
        return Result.success();
    }
    @OpLog
    @PostMapping//("/depts")
    public Result add(@RequestBody Dept dept){
        log.info("dept={}",dept);
        deptService.add(dept);
        return  Result.success();
    }

    @GetMapping("/{id}")//("/depts/{id}")
    public Result selectByid(@PathVariable Integer id){
        log.info("deptId={}",id);
        Dept dept = deptService.selectBy(id);
        return Result.success(dept);
    }
    @OpLog
    @PutMapping//("/depts")
    public Result update(@RequestBody Dept dept){
        log.info("dept={}",dept);
        deptService.update(dept);
        return Result.success();
    }


  /*  //限制请求方式为GET
    @GetMapping("/depts")//限制请求方式为GET，等价@RequestMapping(value = "/depts",method = RequestMethod.GET)
    public Result getAll() throws Exception {
        //1、加载并读取dept.txt文件
        //通过类加载器，可以获取类路径下的所有资源
        InputStream is = this.getClass().getClassLoader().getResourceAsStream("dept.txt");
        List<String> strings = IOUtils.readLines(is);
        //2、解析文本中的数据，并将其封装成集合
        List<Dept> depts = new ArrayList<>();
        for (String string : strings) {
            String[] strs = string.split(",");
            Integer id = Integer.valueOf(strs[0]);
            String name = strs[1];
            LocalDateTime ldt = LocalDateTime.parse(strs[2], DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
            Dept dept = new Dept(id, name, ldt);
            depts.add(dept);
        }
        //3、响应数据(json格式)
        return  Result.success(depts);
    }*/



/*@RequestMapping("/depts")
    public List<Dept> getAll() throws Exception {
        //1、加载并读取dept.txt文件
            //通过类加载器，可以获取类路径下的所有资源
        InputStream is = this.getClass().getClassLoader().getResourceAsStream("dept.txt");
        List<String> strings = IOUtils.readLines(is);
        //2、解析文本中的数据，并将其封装成集合
        List<Dept> depts = new ArrayList<>();
        for (String string : strings) {
            String[] strs = string.split(",");
            Integer id = Integer.valueOf(strs[0]);
            String name = strs[1];
            LocalDateTime ldt = LocalDateTime.parse(strs[2], DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"));
            Dept dept = new Dept(id, name, ldt);
            depts.add(dept);
        }
        //3、响应数据(json格式)
        return  depts;
    }*/
}
